package com.season.seasonStudy.javase.j_015_genericClass;
/**
 * 泛型集合:
 * 在集合里确定数据类型,
 * 
 * 不然刚填入数据,就向上转型为Object了
 * 取得时候不能随便取
 * 
 * 泛型: 
 * 		定义不控制类型 
 * 		使用的时候lolp0-9
 * 
 * Map<k,v> k不能写基本数据类型,可以用他的封装类型 //这里犯了很多次错了
 * 
 * 泛型什么时候用,什么时候就设定住了.  平常泛型是用来进行设计的
 * 通用设计用的是泛型
 * 定义好了之后,输出的都是这个类
 * 
 * 想要看到人家写的,专门找一个方法,  那就showview>outline
 * 
 * 1 . 类上加上泛型:	类<T>
 * 	所有方法参数 ,方法返回值,属性都可以是用类型T
 * 2 . 泛型方法:		public <T> 返回值 方法名(){};
 * 	只有当前方法可以是用泛型T类型
 * 
 * comparable 接口实现排序   多引用数据类型,  自己 重写一下  ,若是泛型如何排序啊?
 * 
 * 泛型的T 可以继承类 或实现接口 ,  嗯嗯好厉害啊
 * 
 * T extends Comparable<T>
 * T extends Users	这里就限定了users 或者他的子类
 * 
 * 传的数组不是T的类  可以用 ? 仅限于已经用泛型类作为参数了
 * 
 * 有很多特殊方法,不需要知道太详细, 只需要会改就好
 * 
 * 3.可以使用extends的方法	<T extends class/interface>
 * 		指代的必须是父类的子类/接口的实现类
 * 	(泛型类)静态方法不能加泛型,但是泛型方法可以静态.
 * 
 * 4.泛型类作为参数/返回值,此时可以是用?通配符
 * 	List<? extends Users>	只能是users的子类
 * 
 * 
 * 
 * 
 * 
 */
public class GenericDemo {
	public static void main(String[] args) {
		Demo<String> m = new Demo<String>();
		m.title="hello";
		m.print("haha");
		m.print(m.getTitle());
		Object o = new Object();
		o.hashCode();
		System.out.println(o.hashCode());
	}
	
	
	
}
